/*************************************************************************************
 * Description  : led driver modules
 * Version      : 1.0
 * Author       : simon.yuan
 * Date         : 2022-01-30 20:29:16
 * LastEditors  : simon.yuan
 * LastEditTime : 2022-01-30 21:07:31
 * FilePath     : \\stm32f103c8t6_096_i2c_oled\\user\\bsp\\led\\led.h
 * Copyright (C) 2022 QinJin Electronics. All rights reserved.
 *************************************************************************************/
#ifndef __LED_H__
#define __LED_H__
#include "sys.h"

/* ??LED???GPIO??, ???????????????????LED?? */
#define LED1_GPIO_PORT      GPIOB
#define LED1_GPIO_CLK       RCC_APB2Periph_GPIOB
#define LED1_GPIO_PIN       GPIO_Pin_12

#define LED2_GPIO_PORT      GPIOB
#define LED2_GPIO_CLK       RCC_APB2Periph_GPIOB
#define LED2_GPIO_PIN       GPIO_Pin_12

#define LED3_GPIO_PORT      GPIOB
#define LED3_GPIO_CLK       RCC_APB2Periph_GPIOB
#define LED3_GPIO_PIN       GPIO_Pin_12

/** the macro definition to trigger the led on or off
  * 1 - off
  *0 - on
  */
#define ON          0
#define OFF         1

/* ??????????IO*/
#define LED1(a) if (a)  \
                    GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);\
                    else        \
                    GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN)

#define LED2(a) if (a)  \
                    GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);\
                    else        \
                    GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN)

#define LED3(a) if (a)  \
                    GPIO_SetBits(LED3_GPIO_PORT,LED3_GPIO_PIN);\
                    else        \
                    GPIO_ResetBits(LED3_GPIO_PORT,LED3_GPIO_PIN)




/* ????????????IO */
#define digitalHi(p,i)          {p->BSRR = i;}  //??????
#define digitalLo(p,i)          {p->BRR  = i;}  //?????
#define digitalToggle(p,i)      {p->ODR ^= i;}  //??????


/* ????IO?? */
#define LED1_TOGGLE             digitalToggle(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_OFF                digitalHi(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON                 digitalLo(LED1_GPIO_PORT,LED1_GPIO_PIN)

#define LED2_TOGGLE             digitalToggle(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED2_OFF                digitalHi(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED2_ON                 digitalLo(LED2_GPIO_PORT,LED2_GPIO_PIN)

#define LED3_TOGGLE             digitalToggle(LED3_GPIO_PORT,LED3_GPIO_PIN)
#define LED3_OFF                digitalHi(LED3_GPIO_PORT,LED3_GPIO_PIN)
#define LED3_ON                 digitalLo(LED3_GPIO_PORT,LED3_GPIO_PIN)


void LED_Init(void);

#endif
